# 作业一
#  查找一个文件中最长的行，输出长度
# • 考虑文件比较大
# • 考虑代码精简
# • # 生成一个大文件
# [root @ kafka01 0729 - homework]  # vim bigfile.py
# [root @ kafka01 0729 - homework]  # python3 bigfile.py
# The
# longest
# str is: hdOKpvkyReCqjSSdqRtkqDBPopgpBOVaolugnWzWawPqnaMlAG
# [root @ kafka01 0729 - homework]  # cat bigfile.py
import string
import random


def big_file():
    with open('big.txt', 'w+', encoding="utf-8") as f:
        for i in range(10000000):
            f.write(("".join(random.choices(string.ascii_letters, k=random.randint(1, 50))) + "\n"))


def long_file():
    with open("big.txt") as file:
        lines = [line.strip() for line in file]
        file.close()
        long_line = ''
        len_line = 0
        for i in lines:
            lenstr = len(i)
            if lenstr > len(long_line):
                long_line = i
        print(f"The longest str is:{long_line}")


big_file()
long_file()
# 作业二
#  如何判断一个对象是可迭代对象，迭代器对象或生成器
# 可迭代对象：可迭代对象实现了__iter__方法，该方法返回一个迭代器，凡是可以返回一个迭代器的对象都是可迭代对象；
# 迭代器：任何实现了__iter__()和__next__()都是迭代器；
# 生成器：是特殊的迭代器，不过生成器更加优雅，生成器自动实现了“迭代器协议”（即__iter__和next方法）
#  迭代器与生成器的区别
# ①生成器是生成元素的，迭代器是访问集合元素的一中方式
# ②迭代输出生成器的内容
# ③迭代器是一种支持next()操作的对象
# ④迭代器（iterator）：其中iterator对象表示的是一个数据流，可以把它看做一个有序序列，但我们不能提前知道序列的长度，只有通过nex()函数实现需要计算的下一个数据。可以看做生成器的一个子集。
#  可迭代对象与迭代器的区别
# 可迭代对象可以生成迭代器
#  如何定义一个生成器
# 生成器表达式与yield函数
# 生成地表达式：使用()生成generator， 将俩表推导式的[]改成()即可得到生成器
# yield函数：包含yield表达式的函数是特殊的函数,叫做生成器函数,被调用时将返回一个迭代器,调用时可以使用next()或send()
#  如何获取可迭代对象、迭代器与生成器中的数据
# 迭代器通过next()方法可以获取可迭代对象中的数据，生成器中的内容可以通过next（）和send（）的方式获得。
# 作业三
# 1、输入两个日期，计算两个日期之间相差的天数
import time,datetime
# def date(x,y):
#     d1 = datetime.datetime.strptime(x,'%Y-%m-%d')
#     d2 = datetime.datetime.strptime(y,'%Y-%m-%d')
#     day = d1 - d2
#     print(day)
#
# print("格式xxxx（年）-xx（月）-xx（日）,例如2021-7-1")
# date1 = input("请输入第一个日期（格式xxxx（年）-xx（月）-xx（日））：")
# date2 = input("请输入第二个日期（格式xxxx（年）-xx（月）-xx（日））：")
# date(date1,date2)
# 2、输入一个数字n，计算n天之前是什么日期，输出日期形式为“2021-07-27”
# def date1(x):
#     now_time = datetime.datetime.now()
#     xtime = now_time + datetime.timedelta(days=-x)
#     print(xtime)
# date1(113)
# 3、统计当前文件夹的大小（python实现，预备知识：os模块）
# import os
# def file_size(k):
#     kb = 1024;
#     mb = kb * 1024;
#     gb = mb * 1024;
#     tb = gb * 1024;
#     if k >= tb:
#         size = float(k/tb)
#         print(f"{size}TB")
#     if k >= gb:
#         size = float(k/gb)
#         print(f"{size}GB")
#     if k >= mb:
#         size = float(k/mb)
#         print(f"{size}MB")
#     if k >= kb:
#         size = float(k/kb)
#         print(f"{size}kB")
#
# path = os.getcwd()
# size = os.path.getsize(path)
# print(size)
# file_size(size)
